//
//  UserAccountViewModel.swift
//  Weobo
//
//  Created by 史亚洲 on 16/1/13.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit
import AFNetworking

class UserAccountViewModel: NSObject {

//MARK:==================将用户登录的信息全部封装到视图模型里面========
    
    //用户账号的模型属性
    var userAccount: UserAccount?
    override init() {
        
        //用缓存数据给模型赋值
        userAccount = UserAccount.loadUserAccount()
        super.init()
    }
    
    //用户是否登录的标记,只读属性,计算型属性
    var userLogin: Bool {
    
    return userAccount?.access_token != nil
    
    }
    
    //从缓存中获取token
    var token: String? {
    
    
    return userAccount?.access_token
    
    }
    //用户名称
    var userName: String? {
    
    return userAccount?.name
    
    }
    //用户头像的url
    var headImageURL: NSURL? {
    
        return NSURL(string: userAccount?.avatar_large ?? "")
    
    }

    //MARK:2.获取授权过的Access Token,需要回调是否登录成功
    func loadAccessToken(code: String,finished: (isSuccess: Bool) ->()) {
        
        //1.url
        let urlString = "oauth2/access_token"
        //        client_id	true	string	申请应用时分配的AppKey。
        //        client_secret	true	string	申请应用时分配的AppSecret。
        //        grant_type	true	string	请求的类型，填写authorization_code
        
        //        必选	类型及范围	说明
        //        code	true	string	调用authorize获得的code值。
        //        redirect_uri	true	string	回调地址，需需与注册应用里的回调地址一致。

        //2.请求的参数
        let parameters = ["client_id": client_id,"client_secret":client_secret,"grant_type": "authorization_code","code": code,"redirect_uri": redirect_uri]
        
        
        
        
        NetworkTools.sharedTools.requestJSONDict(.POST,urlString: urlString, parameters: parameters) { (dict, error) -> () in
            if error != nil {
                //1.请求失败
                finished(isSuccess: false)
                return
            }
            
                //2.请求成功
            let account = UserAccount(dict : dict!)
            print(account)
            
                //3.加载用户信息
            self.loadUserInfo(account, finished: finished)
            
            
        }
//        
//        //3.设置支持解析JSON格式数据
//        AFN.responseSerializer.acceptableContentTypes?.insert("text/plain")
//        
//        
//        //4.发出post请求
//        AFN.POST(urlString, parameters: parameters, progress: nil, success: { (_, result) -> Void in
//            print(result)
//            
//            //类型转换将anyObject对象转换为[key:Value]
//            guard let dict = result as? [String: AnyObject] else {
//                print("数据格式不合法")
//                //执行失败的回调
//                finished(isSuccess: false)
//                
//                return
//                
//            }
//            
//            //程序到这里表示anyObject一定被转换为字典格式的数据
//            //                let access_token = dict["access_token"] as! String
//            //                let uid = dict["uid"] as! String
//            let account = UserAccount(dict: dict)
//            print(account)
//            
//            //获取用户信息
//            self.loadUserInfo(account, finished: finished)
//            
//            
//            }) { (_, error) -> Void in
//               
//                //出现错误,也需要回调
//                finished(isSuccess: false)
//                 print(error)
//        }
        
        
        
    }
    
    /*
    请求参数
    必选	类型及范围	说明
    source	false	string	采用OAuth授权方式不需要此参数，其他授权方式为必填参数，数值为应用的AppKey。
    access_token	false	string	采用OAuth授权方式为必填参数，其他授权方式不需要此参数，OAuth授权后获得。
    uid	false	int64	需要查询的用户ID。
    screen_name	false	string	需要查询的用户昵称。
    注意事项
    参数uid与screen_name二者必选其一，且只能选其一；
    接口升级后，对未授权本应用的uid，将无法获取其个人简介、认证原因、粉丝数、关注数、微博数及最近一条微博内容。
    
    */
    //MARK:加载用户的信息,根据用户ID获取用户信息
    private func loadUserInfo(account: UserAccount,finished: (isSuccess: Bool) ->()){
        //print(access_token,uid)
        //1.准备url
        let urlString = "2/users/show.json"
        let parameters = ["access_token": account.access_token!,"uid": account.uid!]
        NetworkTools.sharedTools.requestJSONDict(.GET, urlString: urlString, parameters: parameters, finished: { (dict, error) -> () in
            if error != nil {
                
               // print("数据格式不合法")
                finished(isSuccess: false)
                return
            }
            
            //请求成功
            let name = dict!["name"] as! String
            let avatar_large = dict!["avatar_large"] as! String
            
            //我们需要的用户信息就能够全部获取到
            account.name = name
            account.avatar_large = avatar_large
            
            print(account)
            account.saveAccount()
            
            //执行成功的回调
            finished(isSuccess: true)
            
        })
    }
    
}
